Objetivo: generar los conocimientos básicos para el análisis e interpretación de datos utilizando el Proyecto R para la Computación Estadística.
Contenido:
Contenido:
El uso de un lenguaje de programación es útil cuando:
R es un lenguaje y ambiente de computación estadística y gráficos.
R es un software de código abierto y se puede descargar para Linux, OS X (Mac) o Windows.
Una interfaz gráfica de usuario permite a los usuarios interactuar con dispositivos electrónicos a través de iconos gráficos en lugar de interfaces de usuario basadas en texto.
RStudio es un ambiente de desarrollo integrado para R, que está disponible en ediciones de código abierto y comerciales y se ejecuta en Windows, Mac y Linux.
Un script de R es simplemente un archivo de texto que contiene (casi) los mismos comandos que se ingresarían en la línea de comandos de R. Permite al usuario computar el mismo conjunto de acciones continuamente.
Los paquetes son colecciones de funciones, datos y código complejo de R en un formato bien definido.
Como ejemplo, podemos instalar el paquete terra:
Los paquetes instalados deben cargarse para usar sus funciones. Para este propósito, se utiliza la función library:
Para eliminar un paquete existente:
Para visualizar los paquetes instalados y los paquetes en uso:
R es un lenguaje interpretado
El resultado de cada comando puede ser:
R es un lenguaje de expresión y es sensible a mayúsculas y minúsculas; por lo tanto, x y X son objetos diferentes que se refieren a variables diferentes
El uso de comentarios es muy útil para saber exactamente lo que está sucediendo en el script. Los comentarios siempre deben comenzar con el símbolo #
Para recuperar y ejecutar comandos anteriores, puede usar las teclas de flecha vertical en el teclado. Esto ayuda revisitar y corregir funciones ejecutadas previamente.
Los datos pueden ser visualizados en la pantalla:
Almacenados en un objeto:
O visualizados en la pantalla por un gráfico:
Hay muchas maneras de asignar un valor a una variable. La más común es el operador <- que está compuesto por el carácter menor que (<) y el carácter de menos (-).
El operador = también se puede usar.
Adicionalmente, se puede usar la función assign.
Un vector numérico es una colección ordenada de números. Para establecer un vector es necesario usar la función c( ).
De manera similar, podemos crear vectores que contengan caracteres:
A veces necesitamos crear vectores largos que sigan una secuencia conocida. Por ejemplo:
Para este propósito, podemos usar el símbolo : que creará una secuencia de enteros consecutivos.
Otra opción es usar la función seq, que creará una secuencia de acuerdo al intérvalo deseado.
seq(from = 1, to = 1, by = ((to - from)/(length.out - 1)),
length.out = NULL, along.with = NULL, ...)Por ejemplo:
Los objetos se caracterizan por su nombre, contenido y atributos. Representan los datos almacenados en ellos. La función mode identifica el tipo de elementos en el objeto. Cada objeto tiene solo un modo. Hay 4 modos principales (modos atómicos):
El comando length indica la cantidad de elementos en un objeto.
El comando length indica la cantidad de elementos en un objeto.
¿Qué modo y longitud corresponden a estos elementos?
| Objeto | Modo | Longitud |
|---|---|---|
| 58i | ||
| Cadmium | ||
| 1:10 | ||
| TRUE |
¿Qué modo y longitud corresponden a estos elementos?
| Objeto | Modo | Longitud |
|---|---|---|
| 58i | complejo | 1 |
| Cadmium | carácter | 1 |
| 1:10 | numérico | 10 |
| TRUE | lógico | 1 |
Todos los objetos en R tienen una clase, que se puede obtener con la función class. En el caso de objetos simples, la clase es la misma que el modo (por ejemplo, “numérico”, “carácter” y “lógico”). Para objetos más complejos, la clase será diferente (por ejemplo, “lista”, “arreglo”, “matriz” y “data.frame”).
En algunos casos, habrá datos faltantes en un conjunto de valores. Estos valores faltantes se representan mediante NA. Tenga en cuenta que esto no es un carácter.
Inf representa un valor numérico no finito.
No es un número (NaN) representa valores que deberían ser numéricos pero no lo son.
abs: valor absoluto del objeto.
^n: elevar al exponente de n.
sqrt: raíz cuadrada del objeto.
log: logaritmo natural.
exp: antilogaritmo.
rep: repite n veces el objeto.
basename: devuelve la parte de la ruta de acceso del archivo después del último separador (/).
data.path <- "C:/Usuarios/Documentos/WS_Sam_Neua/WS1_proj.tif"
basename(data.path)
## [1] "WS1_proj.tif"dirname: devuelve la parte de la ruta de acceso del archivo antes del último separador (/).
paste: se utiliza para pegar múltiples caracteres de texto juntos en un objeto.
paste0: se utiliza para pegar múltiples caracteres juntos en en un objeto sin espacios.
file.path: Similar a paste y paste0, pero agregará barras diagonales entre cada entrada.
substr: se utiliza para extraer (o reemplazar) subcadenas en un vector de caracteres.
Para este segundo ejemplo, podríamos combinar la función substr y basename de la siguiente manera:
Para listar los archivos dentro de una carpeta, se puede utilizar la función list.files. Copie una ruta desde una carpeta en su computadora.
list.files(path = ".", pattern = NULL, all.files = FALSE,
full.names = FALSE, recursive = FALSE,
ignore.case = FALSE, include.dirs = FALSE, no.. = FALSE)Por ejemplo:
## [1] "Italy.csv" "Spain.csv"
## [1] "../Data/L2_Introduction_II_Data/Cities/Italy.csv"
## [2] "../Data/L2_Introduction_II_Data/Cities/Spain.csv"
Sys.time: Imprime la fecha y hora actual. Esto puede ser útil al ejecutar scripts largos, para determinar cuánto tiempo ha tardado en ejecutarse un paso o todo el script.
t(): Transpone una matriz.
example <- matrix(c(1:20), nrow = 5)
print(example)
## [,1] [,2] [,3] [,4]
## [1,] 1 6 11 16
## [2,] 2 7 12 17
## [3,] 3 8 13 18
## [4,] 4 9 14 19
## [5,] 5 10 15 20
example.trans <- t(example)
print(example.trans)
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 2 3 4 5
## [2,] 6 7 8 9 10
## [3,] 11 12 13 14 15
## [4,] 16 17 18 19 20cumsum: Devuelve la suma acumulada de un vector.
log10: Logaritmo base 10.
La función help.start abrirá un navegador web que permite navegar por las páginas de ayuda con hipervínculos.
No es necesario memorizar toda la información para incluir en cada función. Puede buscar la documentación de R con el signo de interrogación (?) antes del nombre de la función.
Además, los dobles signos de interrogación (??) buscan en los archivos de ayuda de R una palabra o frase.
Dos vectores se pueden sumar, restar, multiplicar y dividir:
range: devuelve los valores mínimo y máximo de un vector.
Las funciones max, min, mean y var devuelven, los valores máximos, mínimos, media y varianza de un vector.
sum: devuelve la suma de cualquier vector.
prod: devuelve el producto de cualquier vector.
sort: ordena los valores de manera creciente (por defecto) o decreciente (decreasing = TRUE).
y <- c(5, 3, 6, 8, 3, -1)
sort(y)
## [1] -1 3 3 5 6 8
sort(y, decreasing = TRUE)
## [1] 8 6 5 3 3 -1Por favor, ordene el siguiente vector de manera creciente y decreciente:
5, 9, 12, -10, -5, 3, 900
order: funciona de manera similar a la función sort, pero en lugar de devolver los valores reordenados, devuelve las posiciones de esos valores.
¿Cuándo podemos usar order en lugar de sort?
Los corchetes cuadrados ([]) se pueden usar para extraer elementos de un vector.
Para extraer todo excepto uno o más elementos seleccionados, podemos usar el símbolo menos dentro de los corchetes cuadrados:
Del mismo vector, extraiga:
Para mostrar todos los valores únicos en un vector, podemos usar la función unique.
Para encontrar la posición de un objeto específico (por ejemplo, valores numéricos, valores de caracteres) en un vector, se usa la función which.
Para conocer la posición de los valores que no son iguales a un objeto específico, podemos usar la función which junto con el operador lógico de desigualdad “!=”.
Nota: cuando se quiere buscar múltiples valores dentro de un objeto, es mejor usar la función %in% (ver Módulo 4).
Una matriz es un array bidimensional. Se puede crear con la función matrix.
Con la función rnorm, podemos crear valores aleatorios con una distribución normal. Podemos usar esta función para crear una matriz de 60 valores aleatorios:
# Matriz con 12 filas y 5 columnas y valores aleatorios
x <- matrix(rnorm(60), nrow = 12)
print(x)
## [,1] [,2] [,3] [,4] [,5]
## [1,] -0.48166296 0.24840174 1.4311439 0.84936978 -0.1191159
## [2,] -0.68547500 -0.02879572 0.1839533 -0.80797167 -0.3899637
## [3,] -2.49579459 1.74108869 1.8259803 -0.08786605 -0.2040439
## [4,] 0.22732001 -2.02229860 -1.3098062 -0.84055964 -2.0630774
## [5,] 1.06116951 -0.79552644 -0.9220030 -0.08553025 -0.9939877
## [6,] -1.36464453 -0.26269084 -0.1016643 0.24596622 -0.1928796
## [7,] 0.44641634 -0.64346843 -0.9653148 -0.69387298 1.0900532
## [8,] 0.27126490 2.18379253 0.8006717 0.89262105 -0.4969217
## [9,] -0.49303449 -0.86117202 -0.7451575 -0.71564718 0.7213207
## [10,] -0.01489914 1.32593727 1.5843628 -0.75317053 -0.3264333
## [11,] 0.14959034 -0.17864492 1.5087869 -1.21969919 -0.4093403
## [12,] 0.57714502 -0.42502538 -0.7483994 -0.83004386 -0.7633338Extraer valores de una matriz es similar a extraer valores de un vector; sin embargo, una matriz tiene dos dimensiones [número de fila, número de columna].
print(x)
## [,1] [,2] [,3] [,4] [,5]
## [1,] -0.48166296 0.24840174 1.4311439 0.84936978 -0.1191159
## [2,] -0.68547500 -0.02879572 0.1839533 -0.80797167 -0.3899637
## [3,] -2.49579459 1.74108869 1.8259803 -0.08786605 -0.2040439
## [4,] 0.22732001 -2.02229860 -1.3098062 -0.84055964 -2.0630774
## [5,] 1.06116951 -0.79552644 -0.9220030 -0.08553025 -0.9939877
## [6,] -1.36464453 -0.26269084 -0.1016643 0.24596622 -0.1928796
## [7,] 0.44641634 -0.64346843 -0.9653148 -0.69387298 1.0900532
## [8,] 0.27126490 2.18379253 0.8006717 0.89262105 -0.4969217
## [9,] -0.49303449 -0.86117202 -0.7451575 -0.71564718 0.7213207
## [10,] -0.01489914 1.32593727 1.5843628 -0.75317053 -0.3264333
## [11,] 0.14959034 -0.17864492 1.5087869 -1.21969919 -0.4093403
## [12,] 0.57714502 -0.42502538 -0.7483994 -0.83004386 -0.7633338
x[9, 3]
## [1] -0.7451575print(x)
## [,1] [,2] [,3] [,4] [,5]
## [1,] -0.48166296 0.24840174 1.4311439 0.84936978 -0.1191159
## [2,] -0.68547500 -0.02879572 0.1839533 -0.80797167 -0.3899637
## [3,] -2.49579459 1.74108869 1.8259803 -0.08786605 -0.2040439
## [4,] 0.22732001 -2.02229860 -1.3098062 -0.84055964 -2.0630774
## [5,] 1.06116951 -0.79552644 -0.9220030 -0.08553025 -0.9939877
## [6,] -1.36464453 -0.26269084 -0.1016643 0.24596622 -0.1928796
## [7,] 0.44641634 -0.64346843 -0.9653148 -0.69387298 1.0900532
## [8,] 0.27126490 2.18379253 0.8006717 0.89262105 -0.4969217
## [9,] -0.49303449 -0.86117202 -0.7451575 -0.71564718 0.7213207
## [10,] -0.01489914 1.32593727 1.5843628 -0.75317053 -0.3264333
## [11,] 0.14959034 -0.17864492 1.5087869 -1.21969919 -0.4093403
## [12,] 0.57714502 -0.42502538 -0.7483994 -0.83004386 -0.7633338
x[, 1]
## [1] -0.48166296 -0.68547500 -2.49579459 0.22732001 1.06116951 -1.36464453
## [7] 0.44641634 0.27126490 -0.49303449 -0.01489914 0.14959034 0.57714502print(x)
## [,1] [,2] [,3] [,4] [,5]
## [1,] -0.48166296 0.24840174 1.4311439 0.84936978 -0.1191159
## [2,] -0.68547500 -0.02879572 0.1839533 -0.80797167 -0.3899637
## [3,] -2.49579459 1.74108869 1.8259803 -0.08786605 -0.2040439
## [4,] 0.22732001 -2.02229860 -1.3098062 -0.84055964 -2.0630774
## [5,] 1.06116951 -0.79552644 -0.9220030 -0.08553025 -0.9939877
## [6,] -1.36464453 -0.26269084 -0.1016643 0.24596622 -0.1928796
## [7,] 0.44641634 -0.64346843 -0.9653148 -0.69387298 1.0900532
## [8,] 0.27126490 2.18379253 0.8006717 0.89262105 -0.4969217
## [9,] -0.49303449 -0.86117202 -0.7451575 -0.71564718 0.7213207
## [10,] -0.01489914 1.32593727 1.5843628 -0.75317053 -0.3264333
## [11,] 0.14959034 -0.17864492 1.5087869 -1.21969919 -0.4093403
## [12,] 0.57714502 -0.42502538 -0.7483994 -0.83004386 -0.7633338
x[3, ]
## [1] -2.49579459 1.74108869 1.82598026 -0.08786605 -0.20404388print(x)
## [,1] [,2] [,3] [,4] [,5]
## [1,] -0.48166296 0.24840174 1.4311439 0.84936978 -0.1191159
## [2,] -0.68547500 -0.02879572 0.1839533 -0.80797167 -0.3899637
## [3,] -2.49579459 1.74108869 1.8259803 -0.08786605 -0.2040439
## [4,] 0.22732001 -2.02229860 -1.3098062 -0.84055964 -2.0630774
## [5,] 1.06116951 -0.79552644 -0.9220030 -0.08553025 -0.9939877
## [6,] -1.36464453 -0.26269084 -0.1016643 0.24596622 -0.1928796
## [7,] 0.44641634 -0.64346843 -0.9653148 -0.69387298 1.0900532
## [8,] 0.27126490 2.18379253 0.8006717 0.89262105 -0.4969217
## [9,] -0.49303449 -0.86117202 -0.7451575 -0.71564718 0.7213207
## [10,] -0.01489914 1.32593727 1.5843628 -0.75317053 -0.3264333
## [11,] 0.14959034 -0.17864492 1.5087869 -1.21969919 -0.4093403
## [12,] 0.57714502 -0.42502538 -0.7483994 -0.83004386 -0.7633338
x[c(1, 2), 4]
## [1] 0.8493698 -0.8079717print(x)
## [,1] [,2] [,3] [,4] [,5]
## [1,] -0.48166296 0.24840174 1.4311439 0.84936978 -0.1191159
## [2,] -0.68547500 -0.02879572 0.1839533 -0.80797167 -0.3899637
## [3,] -2.49579459 1.74108869 1.8259803 -0.08786605 -0.2040439
## [4,] 0.22732001 -2.02229860 -1.3098062 -0.84055964 -2.0630774
## [5,] 1.06116951 -0.79552644 -0.9220030 -0.08553025 -0.9939877
## [6,] -1.36464453 -0.26269084 -0.1016643 0.24596622 -0.1928796
## [7,] 0.44641634 -0.64346843 -0.9653148 -0.69387298 1.0900532
## [8,] 0.27126490 2.18379253 0.8006717 0.89262105 -0.4969217
## [9,] -0.49303449 -0.86117202 -0.7451575 -0.71564718 0.7213207
## [10,] -0.01489914 1.32593727 1.5843628 -0.75317053 -0.3264333
## [11,] 0.14959034 -0.17864492 1.5087869 -1.21969919 -0.4093403
## [12,] 0.57714502 -0.42502538 -0.7483994 -0.83004386 -0.7633338
x[c(3, 4), c(1, 2)]
## [,1] [,2]
## [1,] -2.495795 1.741089
## [2,] 0.227320 -2.022299Una lista es una colección ordenada de objetos conocidos como componentes, que pueden ser de diferentes clases.
Crear una lista e imprimirla:
Los elementos de una lista siempre están enumerados. Para acceder a cada nivel de una lista:
También se puede acceder utilizando su respectiva posición:
Ahora que sabemos donde están los valores de dinos.eaten, ¿Cómo podemos extraer el número 12?
Un data frame es una tabla o estructura de tipo array bidimensional en la que cada columna contiene valores de una variable y cada fila contiene un conjunto de valores de cada columna.
Las reglas para los data frames son las siguientes:
Para construir un data frame, se utiliza la función data.frame. Como ejemplo, tenemos la siguiente información:
| River | Length(km) | Discharge (m\(^3\)/s) |
|---|---|---|
| Congo | 4370 | 41200 |
| Mekong | 4023 | 16000 |
| Rhine | 1233 | 2900 |
Utilizando el símbolo $, podemos extraer datos de una columna determinada.
El simbolo $ también se puede utilizar para crear una nueva columna de datos. Aquí convertiremos la descarga de m\(^3\)/s a BCM/año y lo almacenaremos en una nueva columna de datos.
Ejecución de scripts: